#include<iostream>
using namespace std;
#include <sys/types.h>  
#include <unistd.h> 


// int main()
// {
//     cout << "my pid: " << getpid() << endl;
//     cout << "my ppid: " << getppid() << endl;

//     while(1)
//     {
//          cout << "my pid: " << getpid() << endl;
//          sleep(1);
//     }
//     return 0;
// }

int gval=0;

int main()
{
    pid_t id = fork();
     //之后会有两个进程运行相同的代码，对于子进程来说，id返回值为0，对于父进程来说，id返回值为子进程的pid
    //fork之后谁先运行由调度器自己决定，所以父子进程的打印顺序不一定
    //fork之后，父子进程各自有自己的代码段，数据段，堆，栈，文件描述符表，
    //但是共享正文段，全局变量，常量，环境变量，用户id，宿主id，工作目录，信号处理方式
    if(id == 0)
    {
        //子进程
        while(1)
        {
            cout << "I am child" << "  gval: " << gval << endl;
            gval += 1;
            sleep(1);
        }
    }
    else if(id > 0)
    {
        //父进程
        while(1)
        {
            cout << "I am parent" << "  gval: " << gval << endl;
            sleep(1);
        }
    }
}